package br.com.simplex.analex;

import java.util.HashMap;
import java.util.Map;

import br.com.simplex.analex.Token.Tipo;

/**
 * Classe que representa os estados do automato finito do Analisador Lexico
 * 
 * @author Jonathan
 * 
 */
public class Estado {

	private Map<Character, Estado> mapaTransicoes = new HashMap<Character, Estado>();
	private boolean isFinal;
	private Tipo tipo;
	public static final Estado ESTADO_ERRO = new Estado(true, Tipo.ERRO);

	public Estado() {
		setFinal(false);
	}

	public Estado(boolean isFinal, Tipo tipo) {
		setFinal(isFinal);
		setTipo(isFinal ? tipo : null);
	}

	public void addTransicao(Character caracter, Estado estado) {
		mapaTransicoes.put(caracter, estado);
	}

	public Estado getEstado(Character caracter) {
		if (mapaTransicoes.containsKey(caracter)) {
			return mapaTransicoes.get(caracter);
		} else {
			return ESTADO_ERRO;
		}
	}

	private void setFinal(boolean isFinal) {
		this.isFinal = isFinal;
	}

	public boolean isFinal() {
		return isFinal;
	}

	private void setTipo(Tipo tipo) {
		this.tipo = tipo;
	}

	public Tipo getTipo() {
		return tipo;
	}

}